This disclosure relates generally to the field of automated configuration management of computer systems. As networks and the Internet in particular have continued to grow in size, so have datacenters housing servers and providing software applications to users across such networks. With servers and software applications numbering in the thousands, a large diversity of server and application types, and significant numbers of configuration elements associated with each server and application, managing both hardware and software resource configurations within datacenters has become challenging. To complicate matters further, these resources frequently are not statically configured, but are instead reconfigured on an as-needed basis, depending upon user demand and resource capacity.
In response to these demands, a number of configuration management software applications have been developed for automating the deployment, configuration and reconfiguration of datacenter resources, and for tracking deployed resource configurations. Because of the heterogeneous nature of a typical datacenter's resources, many configuration management products represent resources using an abstraction layer that presents the resources to the management software in a consistent manner, creating the appearance of a homogeneous environment. The abstraction layer enables the management software to operate on all resources using the same mechanisms, or to at least operate on resources of a same type using the same mechanisms. The abstraction layer thus helps to ensure consistent behavior of resources or resource types in response to management software operations, and provides a management software user with user interface representations of the resources that have a consistent look and feel.
Existing configuration management software abstraction layers are typically implemented using one of two approaches: script extensions and hard-coded/native extensions. Script extensions are programmed separately from the configuration management software and are executed on the managed systems. With script extensions, the configuration management software has the ability to interact with the remotely executed scripts (e.g., Bourne shell scripts, C shell scripts, Perl scripts, etc.). Scripts can be developed by either the provider or the user of the configuration management software to further extend the configuration management software's capabilities. Configuration parameters and/or commands are passed as arguments to a script that is remotely executed on a managed system. The results produced by the script when executed are similarly passed back to the configuration management software for appropriate processing. While script extensions provide a great deal of functional flexibility, they do not provide typing and naming of arguments and results data, cannot be deployed and/or localized, do not specify the applicability of specific configuration management parameter values to a resource, and do not support ad hoc reports. Also, script-based solutions are generally not well suited for providing abstraction layers for complex enterprise-level applications.
Hard-coded/native extensions also execute on the managed systems and communicate over a network with the configuration management software. These extensions are generally developed and maintained by the configuration management software developers. As a result, hard-coded/native extensions can take advantage of the full range of the configuration management system's capabilities, are strongly typed, can be deployed and localized, and can provide support for all available configuration management parameter options. However, hard-coded/native extensions are expensive to develop, are platform specific and thus not portable, are difficult to support and upgrade in large enterprise environments, and their releases are tied to configuration management software releases. Further, because a hard-coded/native extension's functionality is built into the extension, further functionality extensions cannot be developed and integrated into the configuration management software by the users.